package com.jprocms.module.cms.service.site;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jprocms.module.cms.api.dto.SiteConfigDto;
import com.jprocms.module.cms.api.dto.SiteDefTplDto;
import com.jprocms.module.cms.controller.admin.site.dto.SiteQueryDto;
import com.jprocms.module.cms.controller.admin.site.vo.SiteCreateReqVO;
import com.jprocms.module.cms.controller.admin.site.vo.SiteQueryReqVO;
import com.jprocms.module.cms.controller.admin.site.vo.SiteUpdateReqVO;
import com.jprocms.module.cms.dal.dataobject.site.SiteDO;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.io.IOException;
import java.util.Collection;
import java.util.List;

/**
 * 站点 Service 接口
 *
 * @author jprocms
 */
public interface SiteService extends IService<SiteDO> {

    /**
     * 创建站点
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createSite(@Valid SiteCreateReqVO createReqVO) throws IOException;

    /**
     * 更新站点
     *
     * @param updateReqVO 更新信息
     */
    void updateSite(@Valid SiteUpdateReqVO updateReqVO);

    /**
     * 更新配置
     *
     * @param SiteConfigDto 更新配置信息
     */
    void updateSiteConfig(@Valid SiteConfigDto siteConfigDto);


    void clearSiteCache(Long siteId);

    /**
     * 删除站点
     *
     * @param id 编号
     */
    void deleteSite(Long id);

    /**
     * 获得站点
     *
     * @param id 编号
     * @return 站点
     */
    SiteDO getSite(Long id);

    /**
     * 获得站点列表
     *
     * @param ids 编号
     * @return 站点列表
     */
    List<SiteDO> getSiteList(Collection<Long> ids);

    /**
     * 获得站点列表
     *
     * @param exportReqVO 查询条件
     * @return 站点列表
     */
    List<SiteDO> getSiteList(SiteQueryReqVO exportReqVO);

    /**
     * 根据配置id查询获得站点列表
     *
     * @param globalConfigId 根据配置id查询
     * @return 站点列表
     */
    List<SiteDO> getSiteList(Integer globalConfigId);

    /**
     * 当前访问站点
     *
     * @param siteQueryDto
     * @param request
     * @return
     */
    SiteDO getCurrentSite(SiteQueryDto siteQueryDto, HttpServletRequest request);

    /**
     * 优先从站点目录解析站点，没有解析到则获取
     *
     * @param sitePath 站点访问目录
     * @return
     */
    SiteDO getSite(String sitePath);

    /**
     * 更新默认模板配置
     *
     * @param SiteConfigDto 更新配置信息
     */
    void updateSiteDefTplConfig(@Valid SiteDefTplDto siteDefTplDto);

}
